package com.wicket.okrapp.integration.dto;

import com.wicket.okrapp.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import javax.validation.constraints.NotNull;
import lombok.Data;

/**
 * @desc EvaObjTargetCycleReportSortDto
 * @使用场景
 */
@Data
public class EvaObjTargetCycleReportSortDto
  extends BaseDto
  implements Serializable {

  /**
   * 被评对象目标周期ID:
   */
  @NotNull(message = "被评对象目标周期ID不能为空")
  @ApiModelProperty("被评对象目标周期ID")
  private String evaObjTargetCycleId;

  /**
   * 排序:
   */
  @NotNull(message = "排序不能为空")
  @ApiModelProperty("排序")
  private Long orderNumber;

  /**
   * 虚拟组织下部门ID
   */
  @ApiModelProperty("牵头部门ID")
  private String deptId;

  /**
   * 组织内部门身份名称
   */
  @ApiModelProperty("组织内部门身份名称")
  private String virtualOrgDeptStatus;

  /**
   * 虚拟组织成员就职记录ID
   */
  @ApiModelProperty("责任人就职记录ID")
  private String virtualOrgInductionRecordId;

  /**
   * 组内职务名称
   */
  @ApiModelProperty("组内职务名称")
  private String virtualOrganizationPosition;

  /**
   * 目标周期简称
   */
  @ApiModelProperty("目标周期简称")
  private String cyclelAlias;

  /**
   * 目标周期名称
   */
  @ApiModelProperty("目标周期名称")
  private String targetCycleName;

  /**
   * 汇报通过时间
   */
  @ApiModelProperty("汇报通过时间")
  private Date reportUpdateTime;

  /**
   * 目标达成情况
   */
  @ApiModelProperty("目标达成情况")
  private String targetReached;

  /**
   * 权重
   */
  @ApiModelProperty("权重")
  private Double weightValue;

  /**
   * 权重分值
   */
  @ApiModelProperty("权重分值")
  private Double weightScore;

  /**
   * 实时得分
   */
  @ApiModelProperty("实时得分")
  private Double realTimeScore;

  /**
   * 实时得分单位
   */
  @ApiModelProperty("实时得分单位")
  private String realTimeScoreUnit;

  /**
   * 实际值
   */
  @ApiModelProperty("实际值")
  private Double actualValue;

  /**
   * 实际值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("实际值单位")
  private String actualValueUnit;

  /**
   * 诊断值
   */
  @ApiModelProperty("诊断值")
  private Double targetDiagnosticValue;

  /**
   * 进度值
   */
  @ApiModelProperty("进度值")
  private Double progressValue;

  /**
   * 进度值单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度值单位")
  private String progressValueUnit;

  /**
   * 进度较上次增降幅
   */
  @ApiModelProperty("进度较上次增降幅")
  private Double progressFromLastRatio;

  /**
   * 进度较上次增降幅单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("进度较上次增降幅单位")
  private String progressFromLastRatioUnit;

  /**
   * 达成度
   */
  @ApiModelProperty("达成度")
  private Double reach;

  /**
   * 达成度单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度单位")
  private String reachUnit;

  /**
   * 达成度较上次增降福
   */
  @ApiModelProperty("达成度较上次增降福")
  private Double actualFromLastTimeRatio;

  /**
   * 达成度较上次增降福单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
   */
  @ApiModelProperty("达成度较上次增降福单位")
  private String actualFromLastTimeRatioUnit;

  /**
   * 关联目标内容ID
   */
  @ApiModelProperty("关联目标内容ID")
  private String targetCycleContentId;

  /**
   * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
   */
  @ApiModelProperty("关联目标内容类型编码")
  private String targetCycleContentTypeCode;

  /**
   * 责任主体类型 PERSONAL:个人 DEPT:部门
   */
  @ApiModelProperty("责任主体类型")
  private String respBodyType;

  /**
   * 目标值
   */
  @ApiModelProperty("目标值")
  private Double targetValue;

  /**
   * 是否子周期 TRUE:是 FALSE:否
   */
  @NotNull(message = "是否子周期不能为空")
  @ApiModelProperty("是否子周期")
  private String isSubCycle;

  /**
   * 数量型指标当无实际值标记 TRUE:是 FALSE:否
   */
  @ApiModelProperty("数量型指标当无实际值标记")
  private String quantityObjectiveNoValue;

  /**
   * 较上次目标变化值
   */
  @ApiModelProperty("较上次目标变化值")
  private Double changeFromLastTarget;

  /**
   * 较上次目标变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标变化值单位")
  private String changeFromLastTargetUnit;

  /**
   * 较上次目标增降幅
   */
  @ApiModelProperty("较上次目标增降幅")
  private Double fromLastTargetLiftRatio;

  /**
   * 较上次目标增降幅单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("较上次目标增降幅单位")
  private String fromLastTargetLiftRatioUnit;

  /**
   * 进度较上次变化值
   */
  @ApiModelProperty("进度较上次变化值")
  private Double fromLastProgressValue;

  /**
   * 进度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("进度较上次变化值单位")
  private String fromLastProgressValueUnit;

  /**
   * 达成度较上次变化值
   */
  @ApiModelProperty("达成度较上次变化值")
  private Double fromLastReach;

  /**
   * 达成度较上次变化值单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("达成度较上次变化值单位")
  private String fromLastReachUnit;

  /**
   * 汇报得分（数值）
   */
  @ApiModelProperty("汇报得分（数值）")
  private Double reportScoreValue;

  /**
   * 汇报得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("汇报得分单位")
  private String reportScoreUnit;

  /**
   * 实际得分（数值）
   */
  @ApiModelProperty("实际得分（数值）")
  private Double actualScoreValue;

  /**
   * 实际得分单位 TIMES:次 DOOR:门 PART:部 SET:套 INDIVIDUAL:个 YUAN:元 NNT:人 PIECE:篇 TERM:项 FEN:分 WAN_YUAN:万元 PERCENT:百分率 PORTION:份
   */
  @ApiModelProperty("实际得分单位")
  private String actualScoreUnit;

  /**
   * 实时得分等级
   */
  @ApiModelProperty("实时得分等级")
  private String realTimeScoreLevel;

  /**
   * 汇报得分（文本）
   */
  @ApiModelProperty("汇报得分（文本）")
  private String reportScore;

  /**
   * 实际得分（文本）
   */
  @ApiModelProperty("实际得分（文本）")
  private String actualScore;

  /**
   * 冗余评价模板ID
   */
  @ApiModelProperty("冗余评价模板ID")
  private String evaluationTemplateId;

  /**
   * 被评对象内容表主键ID
   */
  @ApiModelProperty("被评对象内容表主键ID")
  private String evaObjEntityId;

  /**
   * 被评对象内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表 OMS_MESSAGE_CHANNEL:通道表
   */
  @ApiModelProperty("被评对象内容表类型编码")
  private String evaObjTableTypeCode;

  /**
   * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
   */
  @ApiModelProperty("被评对象类型编码")
  private String evaObjTypeCode;

  /**
   * 冗余目标ID
   */
  @ApiModelProperty("冗余目标ID")
  private String targetId;

  /**
   * 是否末级指标 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否末级指标")
  private String isLastObjective;

  /**
   * 目标实际结束时间
   */
  @ApiModelProperty("目标实际结束时间")
  private Date targetActualEndtTime;

  /**
   * 周期ID
   */
  @ApiModelProperty("周期ID")
  private String cycleId;

  /**
   * 展示目标值
   */
  @ApiModelProperty("展示目标值")
  private Double showTargetValue;

  /**
   * 冗余单位
   */
  @ApiModelProperty("冗余单位")
  private String unit;

  private Date cycleEndTime;

  /**
   * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
   */
  @ApiModelProperty("冗余指标业务类型")
  private String targetValueType;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    EvaObjTargetCycleReportSortDto that = (EvaObjTargetCycleReportSortDto) o;
    return (
      evaObjTargetCycleId == that.evaObjTargetCycleId &&
      orderNumber == that.orderNumber &&
      deptId == that.deptId &&
      virtualOrgDeptStatus == that.virtualOrgDeptStatus &&
      virtualOrgInductionRecordId == that.virtualOrgInductionRecordId &&
      virtualOrganizationPosition == that.virtualOrganizationPosition &&
      cyclelAlias == that.cyclelAlias &&
      targetCycleName == that.targetCycleName &&
      reportUpdateTime == that.reportUpdateTime &&
      targetReached == that.targetReached &&
      weightValue == that.weightValue &&
      weightScore == that.weightScore &&
      realTimeScore == that.realTimeScore &&
      realTimeScoreUnit == that.realTimeScoreUnit &&
      actualValue == that.actualValue &&
      actualValueUnit == that.actualValueUnit &&
      targetDiagnosticValue == that.targetDiagnosticValue &&
      progressValue == that.progressValue &&
      progressValueUnit == that.progressValueUnit &&
      progressFromLastRatio == that.progressFromLastRatio &&
      progressFromLastRatioUnit == that.progressFromLastRatioUnit &&
      reach == that.reach &&
      reachUnit == that.reachUnit &&
      actualFromLastTimeRatio == that.actualFromLastTimeRatio &&
      actualFromLastTimeRatioUnit == that.actualFromLastTimeRatioUnit &&
      targetCycleContentId == that.targetCycleContentId &&
      targetCycleContentTypeCode == that.targetCycleContentTypeCode &&
      respBodyType == that.respBodyType &&
      targetValue == that.targetValue &&
      isSubCycle == that.isSubCycle &&
      quantityObjectiveNoValue == that.quantityObjectiveNoValue &&
      changeFromLastTarget == that.changeFromLastTarget &&
      changeFromLastTargetUnit == that.changeFromLastTargetUnit &&
      fromLastTargetLiftRatio == that.fromLastTargetLiftRatio &&
      fromLastTargetLiftRatioUnit == that.fromLastTargetLiftRatioUnit &&
      fromLastProgressValue == that.fromLastProgressValue &&
      fromLastProgressValueUnit == that.fromLastProgressValueUnit &&
      fromLastReach == that.fromLastReach &&
      fromLastReachUnit == that.fromLastReachUnit &&
      reportScoreValue == that.reportScoreValue &&
      reportScoreUnit == that.reportScoreUnit &&
      actualScoreValue == that.actualScoreValue &&
      actualScoreUnit == that.actualScoreUnit &&
      realTimeScoreLevel == that.realTimeScoreLevel &&
      reportScore == that.reportScore &&
      actualScore == that.actualScore &&
      evaluationTemplateId == that.evaluationTemplateId &&
      evaObjEntityId == that.evaObjEntityId &&
      evaObjTableTypeCode == that.evaObjTableTypeCode &&
      evaObjTypeCode == that.evaObjTypeCode &&
      targetId == that.targetId &&
      isLastObjective == that.isLastObjective &&
      targetActualEndtTime == that.targetActualEndtTime &&
      cycleId == that.cycleId &&
      showTargetValue == that.showTargetValue &&
      unit == that.unit &&
      cycleEndTime == that.cycleEndTime &&
      targetValueType == that.targetValueType
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      evaObjTargetCycleId,
      orderNumber,
      deptId,
      virtualOrgDeptStatus,
      virtualOrgInductionRecordId,
      virtualOrganizationPosition,
      cyclelAlias,
      targetCycleName,
      reportUpdateTime,
      targetReached,
      weightValue,
      weightScore,
      realTimeScore,
      realTimeScoreUnit,
      actualValue,
      actualValueUnit,
      targetDiagnosticValue,
      progressValue,
      progressValueUnit,
      progressFromLastRatio,
      progressFromLastRatioUnit,
      reach,
      reachUnit,
      actualFromLastTimeRatio,
      actualFromLastTimeRatioUnit,
      targetCycleContentId,
      targetCycleContentTypeCode,
      respBodyType,
      targetValue,
      isSubCycle,
      quantityObjectiveNoValue,
      changeFromLastTarget,
      changeFromLastTargetUnit,
      fromLastTargetLiftRatio,
      fromLastTargetLiftRatioUnit,
      fromLastProgressValue,
      fromLastProgressValueUnit,
      fromLastReach,
      fromLastReachUnit,
      reportScoreValue,
      reportScoreUnit,
      actualScoreValue,
      actualScoreUnit,
      realTimeScoreLevel,
      reportScore,
      actualScore,
      evaluationTemplateId,
      evaObjEntityId,
      evaObjTableTypeCode,
      evaObjTypeCode,
      targetId,
      isLastObjective,
      targetActualEndtTime,
      cycleId,
      showTargetValue,
      unit,
      cycleEndTime,
      targetValueType
    );
  }

}
